package java_thinking.unit_21._21_2;

import javax.servlet.*;
import java.io.IOException;
import java.util.concurrent.atomic.AtomicLong;

/**
 * @Desc:   2-4 使用元原子类型变量
 *              由于Servlet的状态就是计数器的状态，并且计数器是线程安全的，因此这里的Servlet也是线程安全的
 *              CountingFactorize将他的线程安全性委托给 AtomicLong 来保证：之所以 CountingFactorize 是线程安全的，
 *              是因为 AtomicLong是线程安全的；但是如果count不是final的，那么就更复杂了，在指向另一个AtomicLong
 *              时要确保不存在竟态条件，这也是尽可能使用final类型域的另一个原因
 *
 * @author: cww
 * @DateTime: 2019/5/29 20:23
 */

public class CountingFactorize extends GenericServlet implements Servlet {
    /**
     * 使用原子类型的变量来保证原子性
     */
    private final AtomicLong count = new AtomicLong(0);

    public long getCount() { return count.get(); }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {

    }
}
